package com.app.util.common;

import java.lang.reflect.Method;
import java.util.LinkedHashMap;
import java.util.Map;

/** 
 * 说明：枚举类处理
 */
public class EnumUtil{
	/**
	 * 转为map集合，枚举对象为键值对
	 * @param ref
	 * @return
	 */
	public static <T> Map<String, Enum>  toEnumObj(Class<T> ref){
		   Map<String, Enum> map = new LinkedHashMap<String, Enum>() ;   
	        if(ref.isEnum()){  
	            T[] ts = ref.getEnumConstants() ;   
	            for(T t : ts){  
	                Enum<?>  tempEnum= (Enum<?>) t ;  
	                map.put(tempEnum.toString(),tempEnum);
	            }  
	        }  
	        return map ; 
	}
	/**
	 * 转为map集合,code、text为键值对
	 * @param ref
	 * @return
	 */
	public static <T> Map<String, String>  toCodeMap(Class<T> ref){
		   Map<String, String> map = new LinkedHashMap<String, String>() ;   
	        if(ref.isEnum()){  
	            T[] ts = ref.getEnumConstants() ;   
	            for(T t : ts){  
	                Enum<?>  tempEnum= (Enum<?>) t ;  
	                map.put(getInvokeValue(tempEnum,"getCode"),getInvokeValue(tempEnum,"getText"));
	            }  
	        }  
	        return map ; 
	}
	
	/**
	 * 获取属性值
	 * @param t
	 * @param methodName
	 * @return
	 */
	private static <T> String getInvokeValue(T t , String methodName){   
		try {
			Method fieldGetMet = t.getClass().getMethod(methodName, new Class[] {});
			Object fieldVal = fieldGetMet.invoke(t, new Object[] {}); 
			return (String)fieldVal;
		} catch (Exception e) {
		}  
          return null ;  
    } 
}
